0 REM ***CHANGE SCREEN COLOR*** 1 REM ***PRINT WAIT MESSAGE *** 2 POKE 53280,11:POKE 53281,0 4 PRINT"[152][147]CLEARING HIGH RES SCREEN . . " 6 PRINT"PLEASE WAIT 35 SECONDS" 7 PRINT"[218][216] COMMODORE-64 HI-RESOLUTION DEMO [193][211]" 8 REM *** CLEAR HI-RES SCREEN *** 10 FOR I=8192 TO 16192:POKE I,0:NEXT 13 REM *** SET UP POWERS OF 2 TABLE *** 14 REM *** FOR ROUTINES 4 & 5 *** 16 FOR I=0 TO 7:P(I)=2^(7-I):P1(I)=255-P(I):NEXT 17 REM *** START HI-RES MODE AND *** 18 REM *** SET HI-RES SCREEN AT 8192 *** 20 PRINT"[147]":POKE 53265,PEEK(53265)OR32:POKE 53272,PEEK(53272)OR8 25 REM *** SET HI-RES COLORS *** 26 REM ***UPPER NYBBLE FOR "1" BITS*** 27 REM ***LOWER NYBBLE FOR "0" BITS*** 30 FOR I=1024 TO 2023:POKE I,192:NEXT 100 REM ***PRINT STRINGS USING*** 101 REM *** ROUTINE 1 *** 102 L=0:R=0:X=0:Y=13:B1=53248:O=1:B$="-2[255][157][157][145][157][199]":GOSUB 10000 103 X=20:Y=13:B$="0":GOSUB 10000 104 X=37:Y=13:B$="[145][217][157][157][157]+2[255]":GOSUB 10000 105 X=19:Y=3:B$="[198]+1":GOSUB 10000 106 X=19:Y=21:B$="[196]-1":GOSUB 10000 107 R=1:X=1:Y=23:B$="[218][216] COMMODORE-64 [200]I-[210]ESOLUTION [196]EMO [142][193][211]":GOSUB 10000 108 REM *** PRINT AXIS USING *** 109 REM *** ROUTINE 3 *** 110 X1=0:Y1=100:X2=319:Y2=100:GOSUB 30000 113 REM *** PRINT AXIS USING *** 114 REM *** ROUTINE 4 *** 115 FOR Y=25 TO 174:X=158:GOSUB 1000:X=157:GOSUB 1000:NEXT 116 REM *** GET USER INPUT WITH *** 117 REM *** ROUTINE 2 *** 120 BL=1:X=0:Y=0:R=0:B$="INPUT PERIOD ? ":GOSUB 20000:J=VAL(I$) 125 REM *** PLOT SINE CURVE *** 126 REM *** USING ROUTINE 4 *** 130 FOR X=0 TO 319:Z=SIN((X-158)/25*J):Y=INT(100-70*Z*Z*Z):GOSUB 1000:NEXT 131 REM *** LABEL PLOT WITH INPUT *** 132 REM *** USING ROUTINE 1 *** 133 L=1:R=0:X=4:Y=1:B$="Y=[142]SIN[145]3(":GOSUB 10000 134 B$=I$:GOSUB 10000:B$="*X)":GOSUB 10000 137 REM *** PAUSE LOOP: WHEN "A" *** 138 REM *** IS RECEIVED GO BACK *** 139 REM *** TO STANDARD MODE *** 140 REM *** AND STOP *** 145 GET A$:IF A$="" THEN 145 150 POKE 53265,PEEK(53265)AND223:PRINT"[147]";:POKE 53272,PEEK(53272)AND21:END 982 : 984 : 990 REM *** ROUTINES 4 & 5 *** 992 REM *** FOR PLOTTING AND *** 994 REM *** UNPLOTTING POINTS *** 996 REM *** SEE REF. GUIDE PG 125 *** 997 : 1000 B=INT(Y/8)*320+INT(X/8)*8+(YAND7)+8192:POKE B,PEEK(B)ORP(XAND7):RETURN 1001 B=INT(Y/8)*320+INT(X/8)*8+(YAND7)+8192:POKE B,PEEK(B)ANDP1(XAND7):RETURN 9980 : 9982 : 9990 REM *** ROUTINE 1: FOR PRINTING *** 9992 REM *** STRINGS IN HI- RES *** 9993 : 9994 REM *** DISABLE INTERRUPTS & *** 9996 REM *** SWITCH IN CHAR ROM *** 9998 REM *** CALCULATE CHAR BASE *** 10000 POKE 56334,PEEK(56334)AND254:POKE 1,PEEK(1)AND251:B2=B1+R*1024+L*2048 10010 REM *** GET A CHARACTER *** 10012 REM *** FROM INPUT STRING *** 10020 FOR I=1 TO LEN(B$):C=ASC(MID$(B$,I,1)) 10026 REM *** SPECIAL CHARACTERS *** 10028 REM *** DECODING SECTION *** 10030 IF C=145 THEN Y=Y-1:NEXT:RETURN:REM ** CURSOR UP ** 10040 IF C=17 THEN Y=Y+1:NEXT:RETURN:REM ** CURSOR DOWN ** 10050 IF C=29 THEN X=X+1:NEXT:RETURN:REM ** CURSOR RIGHT ** 10060 IF C=157 THEN X=X-1:NEXT:RETURN:REM ** CURSOR LEFT ** 10070 IF C=18 THEN R=1:B2=B1+1024+L*2048:NEXT:RETURN:REM ** REVERSE ON ** 10080 IF C=146 THEN R=0:B2=B1+L*2048:NEXT:RETURN:REM ** REVERSE OFF ** 10090 IF C=19 THEN X=0:Y=0:NEXT:RETURN:REM ** CURSOR HOME ** 10100 IF C=14 THEN L=1:B2=B1+R*1024+2048:NEXT:RETURN:REM ** START LOWER CASE ** 10120 IF C=142 THEN L=0:B2=B1+R*1024:NEXT:RETURN:REM ** STOP LOWER CASE ** 10130 IF C=255 THEN C=126:REM ** "[255]" IS SPECIAL CASE ** 10132 REM *** TRANSLATE CHR$ CODES *** 10134 REM *** TO SCREEN CODES: CHARS *** 10136 REM *** PATTERNS IN ROM STORED *** 10138 REM *** BY SCREEN CODE *** 10140 ON C/32+1 GOTO 10150,10200,10170,10160,10150,10170,10190,10170 10150 C=32:GOTO 10200 10160 C=C-32:GOTO 10200 10170 C=C-64:GOTO 10200 10180 C=C-96:GOTO 10200 10190 C=C-128 10192 REM *** CALCULATE STARTING POS *** 10194 REM *** FOR STRING AND CHAR *** 10196 REM *** DEFINITION *** 10200 Z=Y*320+X*8+8192:C=C*8+B2 10220 REM *** POKE DEFINITION INTO *** 10222 REM *** HI-RES LOCATION *** 10240 FOR J=0 TO 7:POKE Z+J,(O*PEEK(Z+J))ORPEEK(C+J):NEXT:X=X+1:NEXT 10260 REM *** RE-ENABLE INTERRUPTS *** 10262 REM *** AND SWITCH OUT ROM *** 10290 POKE 1,PEEK(1)OR4:POKE 56334,PEEK(56334)OR1:RETURN 19880 : 19882 : 19900 REM *** ROUTINE 2-USER INPUT *** 19901 : 19902 REM *** INITIALIZE INPUT STRING *** 19904 REM *** SAVE START POSITION AND *** 19906 REM *** LENGTH OF PROMPT *** 20000 I$="":HX=X:HY=Y:HB=LEN(B$):GOSUB 10000 20008 REM *** GET A CHAR *** 20010 GET B$:IF B$="" THEN 20010 20014 REM *** CHECK FOR SPECIAL CHARS *** 20016 REM *** ONLY FIRST TWO ARE *** 20018 REM ***DIFFERENT FROM ROUTINE 1 *** 20020 IF B$=CHR$(13) THEN 20070:REM *** RETURN *** 20030 IF B$=CHR$(20) THEN 20045:REM *** DELETE *** 20031 IF B$=CHR$(145) THEN 20041 20032 IF B$=CHR$(17) THEN 20041 20033 IF B$=CHR$(29) THEN 20041 20034 IF B$=CHR$(157) THEN 20041 20035 IF B$=CHR$(18) THEN 20041 20036 IF B$=CHR$(146) THEN 20041 20037 IF B$=CHR$(19) THEN 20041 20038 IF B$=CHR$(14) THEN 20041 20039 IF B$=CHR$(142) THEN 20041 20040 REM *** ECHO CHARACTER *** 20041 GOSUB 10000 20042 I$=I$+B$:GOTO 20010 20043 REM *** DELETE KEY: DONT DELETE *** 20044 REM *** IF NOTHING THERE *** 20045 IF LEN(I$)=0 THEN 20010 20046 REM *** MOVE BACK AND BLANK ONE *** 20047 REM *** CHAR; UPDATE INPUT *** 20050 X=X-1:Z=Y*320+X*8+8192:FOR I=0 TO 7:POKE Z+I,0:NEXT:I$=LEFT$(I$,LEN(I$)-1) 20058 REM *** GET NEXT CHAR *** 20060 GOTO 20010 20066 REM *** BLANK INPUT IF DESIRED *** 20068 REM *** ELSE RETURN *** 20070 IF BL=0 THEN RETURN 20074 REM *** STARTING ADDRESS FOR *** 20076 REM *** BLANKING AND BLANKING *** 20078 REM *** LOOP *** 20080 Z=320*HY+8*HX+8192:FOR I=0 TO (HB+LEN(I$))*8:POKE Z+I,0:NEXT:RETURN 29880 : 29882 : 29900 REM *** ROUTINE 3 *** 29902 REM *** DRAW A LINE *** 29903 : 29904 REM *** CALCULATE SLOPE AND *** 29906 REM *** DECIDE WHETHER TO *** 29908 REM *** INCREMENT X OR Y *** 30000 XD=X1-X2:YD=Y1-Y2 30010 IFXD=0THEN30200 30020 IFYD=0THEN30300 30030 M=YD/XD:S=Y1-M*X1 30040 IFABS(M)<=.5THEN30400 30050 M=XD/YD:S=X1-M*Y1 30060 REM *** CALCULATE X *** 30062 REM *** STEP ALONG Y *** 30100 FORY=Y1TOY2STEPSGN(Y2-Y1):X=M*Y+S:GOSUB1000:NEXT:RETURN 30160 REM *** VERTICAL LINE *** 30162 REM *** STEP ALONG Y *** 30200 X=X1:FORY=Y1TOY2STEPSGN(Y2-Y1):GOSUB1000:NEXT:RETURN 30260 REM *** HORIZONTAL LINE *** 30262 REM *** STEP ALONG X *** 30300 Y=Y1:FORX=X1TOX2STEPSGN(X2-X1):GOSUB1000:NEXT:RETURN 30360 REM *** CALCULATE Y *** 30362 REM *** STEP ALONG X *** 30400 FORX=X1TOX2STEPSGN(X2-X1):Y=M*X+S:GOSUB1000:NEXT:RETURN